﻿using System;

namespace NTmdb.Abstraction
{
    /// <summary>
    ///     Interface representing the configuration for the TMDb API.
    /// </summary>
    public interface IApiConfiguration
    {
        /// <summary>
        ///     Gets or sets the TMDb PI key.
        /// </summary>
        /// <value>The TMDb PI key.</value>
        String ApiKey { get; set; }

        /// <summary>
        ///     Gets or sets the pattern used by the TMDb API for <see cref="DateTime" /> values.
        /// </summary>
        /// <remarks>
        ///     Currently(21.06.2013) it is: "yyyy-MM-dd HH:mm:ss 'UTC'"
        /// </remarks>
        /// <value>
        ///     The pattern used by the TMDb API for <see cref="DateTime" /> values.
        /// </value>
        String JsonDateTimePattern { get; set; }

        /// <summary>
        ///     Gets or sets the pattern used by the TMDb API for <see cref="DateTime" /> values (only date no time).
        /// </summary>
        /// <remarks>
        ///     Currently(21.06.2013) it is: "yyyy-MM-dd"
        /// </remarks>
        /// <value>
        ///     The pattern used by the TMDb API for <see cref="DateTime" /> values (only date no time).
        /// </value>
        String JsonDatePattern { get; set; }

        /// <summary>
        ///     Gets or sets the URL of the TMDb API.
        /// </summary>
        /// <remarks>
        ///     Currently(21.06.2013) it is: http://api.themoviedb.org/3
        /// </remarks>
        /// <value>The URL of the TMDb API. </value>
        String ApiUrl { get; set; }

        /// <summary>
        ///     Gets or sets the name of the API key parameter.
        /// </summary>
        /// <remarks>
        ///     Currently (21.06.2013): api_key
        /// </remarks>
        /// <value>The name of the API key parameter.</value>
        String ApiKeyParameterName { get; set; }

        /// <summary>
        ///     Gets or sets the name of the TMDb's configuration method.
        /// </summary>
        /// <remarks>
        ///     Currently (21.06.2013): configuration
        /// </remarks>
        /// <value>The name of the TMDb's configuration method.</value>
        String ConfigurationMethodName { get; set; }

        /// <summary>
        ///     Gets or sets the name of the TMDb's authentication new token method.
        /// </summary>
        /// <remarks>
        ///     Currently (21.06.2013): authentication/token/new
        /// </remarks>
        /// <value>The name of the TMDb's authentication new token method.</value>
        String AuthenticationTokenMethodName { get; set; }

        /// <summary>
        ///     Gets or sets the name of the TMDb's authentication new session method.
        /// </summary>
        /// <remarks>
        ///     Currently (21.06.2013): authentication/session/new
        /// </remarks>
        /// <value>The name of the TMDb's authentication new session method.</value>
        String SessionMethodName { get; set; }

        /// <summary>
        ///     Gets or sets the name of the TMDb's authentication new guest session method.
        /// </summary>
        /// <remarks>
        ///     Currently (21.06.2013): authentication/guest_session/new
        /// </remarks>
        /// <value>The name of the TMDb's authentication new guest session method.</value>
        String GuestSessionMethodName { get; set; }

        /// <summary>
        ///     Gets or sets the name of the TMDb's movie method.
        /// </summary>
        /// <remarks>
        ///     Currently (21.06.2013): movie/ (with parameter id: movie/{id})
        /// </remarks>
        /// <value>The name of the TMDb's movie method.</value>
        String MovieMethodName { get; set; }

        /// <summary>
        ///     Gets or sets the name of the TMDb's alternative titles method.
        /// </summary>
        /// <remarks>
        ///     Currently (21.06.2013): movie/{id}/alternative_titles
        /// </remarks>
        /// <value>The name of the TMDb's alternative titles method.</value>
        String AlternativeTitlesMethodName { get; set; }

        /// <summary>
        ///     Gets or sets the name of the TMDb's cast method.
        /// </summary>
        /// <remarks>
        ///     Currently (21.06.2013): movie/{id}/casts
        /// </remarks>
        /// <value>The name of the TMDb's cast method.</value>
        String CastMethodName { get; set; }

        /// <summary>
        ///     Gets or sets the name of the TMDb's keywords method.
        /// </summary>
        /// <remarks>
        ///     Currently (21.06.2013): movie/{id}/keywords
        /// </remarks>
        /// <value>The name of the TMDb's keywords method.</value>
        String KeywordsMethodName { get; set; }

        /// <summary>
        ///     Gets or sets the name of the TMDb's releases method.
        /// </summary>
        /// <remarks>
        ///     Currently (21.06.2013): movie/{id}/releases
        /// </remarks>
        /// <value>The name of the TMDb's releases method.</value>
        String ReleasesMethodName { get; set; }

        /// <summary>
        ///     Gets or sets the name of the TMDb's images method.
        /// </summary>
        /// <remarks>
        ///     Currently (21.06.2013): movie/{id}/images
        /// </remarks>
        /// <value>The name of the TMDb's images method.</value>
        String ImagesMethodName { get; set; }

        /// <summary>
        ///     Gets or sets the name of the TMDb's trailers method.
        /// </summary>
        /// <remarks>
        ///     Currently (21.06.2013): movie/{id}/trailers
        /// </remarks>
        /// <value>The name of the TMDb's trailers method.</value>
        String TrailersMethodName { get; set; }

        /// <summary>
        ///     Gets or sets the name of the TMDb's translations method.
        /// </summary>
        /// <remarks>
        ///     Currently (21.06.2013): movie/{id}/translations
        /// </remarks>
        /// <value>The name of the TMDb's translations method.</value>
        String TranslationsMethodName { get; set; }

        /// <summary>
        ///     Gets or sets the name of the TMDb's similar movies method.
        /// </summary>
        /// <remarks>
        ///     Currently (21.06.2013): movie/{id}/similar_movies
        /// </remarks>
        /// <value>The name of the TMDb's similar movies method.</value>
        String SimilarMoviesMethodName { get; set; }

        /// <summary>
        ///     Gets or sets the name of the TMDb's reviews method.
        /// </summary>
        /// <remarks>
        ///     Currently (21.06.2013): movie/{id}/reviews
        /// </remarks>
        /// <value>The name of the TMDb's reviews method.</value>
        String ReviewsMethodName { get; set; }

        /// <summary>
        ///     Gets or sets the name of the TMDb's lists method.
        /// </summary>
        /// <remarks>
        ///     Currently (21.06.2013): movie/{id}/lists
        /// </remarks>
        /// <value>The name of the TMDb's lists method.</value>
        String ListsMethodName { get; set; }

        /// <summary>
        ///     Gets or sets the name of the TMDb's changes method.
        /// </summary>
        /// <remarks>
        ///     Currently (21.06.2013): movie/{id}/changes
        /// </remarks>
        /// <value>The name of the TMDb's changes method.</value>
        String ChangesMethodName { get; set; }

        /// <summary>
        ///     Gets or sets the name of the TMDb's latest method.
        /// </summary>
        /// <remarks>
        ///     Currently (21.06.2013): movie/latest
        /// </remarks>
        /// <value>The name of the TMDb's latest method.</value>
        String LatestMethodName { get; set; }

        /// <summary>
        ///     Gets or sets the name of the TMDb's upcoming method.
        /// </summary>
        /// <remarks>
        ///     Currently (21.06.2013): movie/upcoming
        /// </remarks>
        /// <value>The name of the TMDb's upcoming method.</value>
        String UpcomingMethodName { get; set; }

        /// <summary>
        ///     Gets or sets the name of the TMDb's now playing method.
        /// </summary>
        /// <remarks>
        ///     Currently (21.06.2013): movie/now_playing
        /// </remarks>
        /// <value>The name of the TMDb's now playing method.</value>
        String NowPlayingMethodName { get; set; }

        /// <summary>
        ///     Gets or sets the name of the request token parameter of the authentication new session method.
        /// </summary>
        /// <remarks>
        ///     Currently (21.06.2013): request_token
        /// </remarks>
        /// <value>The name of the request token parameter of the authentication new session method.</value>
        String RequestTokenParameterName { get; set; }

        /// <summary>
        ///     Gets or sets the name of the language parameter of the movie, similar movies, lists, upcoming and images method.
        /// </summary>
        /// <remarks>
        ///     Currently (21.06.2013): language
        /// </remarks>
        /// <value>The name of the language parameter of the movie, similar movies, lists, upcoming and images method.</value>
        String LanguageParameterName { get; set; }

        /// <summary>
        ///     Gets or sets the name of the country parameter of the alternate titles method.
        /// </summary>
        /// <remarks>
        ///     Currently (21.06.2013): country
        /// </remarks>
        /// <value>The name of the country parameter of the alternate titles method.</value>
        String CountryParameterName { get; set; }

        /// <summary>
        ///     Gets or sets the name of the page parameter of the similar movies, lists, upcoming and review method.
        /// </summary>
        /// <remarks>
        ///     Currently (21.06.2013): page
        /// </remarks>
        /// <value>The name of the page parameter of the similar movies, lists, upcoming, and review method.</value>
        String PageParameterName { get; set; }

        /// <summary>
        ///     Gets or sets the name of the start date parameter of the changes method.
        /// </summary>
        /// <remarks>
        ///     Currently (21.06.2013): start_date
        /// </remarks>
        /// <value>The name of the start date parameter of the changes method.</value>
        String StartDateParameterName { get; set; }

        /// <summary>
        ///     Gets or sets the name of the end date parameter of the changes method.
        /// </summary>
        /// <remarks>
        ///     Currently (21.06.2013): end_date
        /// </remarks>
        /// <value>The name of the end date parameter of the changes method.</value>
        String EndDateParameterName { get; set; }
    }
}

/*
 * ApiKey = "ba9a4d5a02b4438300a712d31316a3ff",
                            ApiUrl = "http://api.themoviedb.org/3",
 * 
 * 
*/